<?php

namespace app\index\controller;

use extend\REST;
use extend\text;
use phpmailer\Exception;
use phpmailer\PHPMailer;
use phpmailer\SMTP;
use think\Db;
use think\Request;
use think\Session;
use think\Validate;


class Weixin extends text
{

    public function index(){


//define your token
    define("TOKEN", "s86");  // 定义常量

    $this->valid();

  }
  public function fasong(){
    // 得到access_token
// access_token是公众号的全局唯一接口调用凭据，
// 公众号调用各接口时都需使用access_token。
// 开发者需要进行妥善保存。

// access_token的有效期目前为2个小时，需定时刷新

// get 请求 url 得到 access_token
$turl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxdccdfb1691df1134&secret=acb6b131bfeb632677343251b8f484f2';

$tres =$this-> https_request($turl);
// var_dump($tres);

// 得到是 accesstoken json 数据
// 提取 access_token string
// $data = json_decode($tres);  // 对象
$data = json_decode($tres,true);  // 数组
// var_dump($data['access_token']);
$access_token = $data['access_token'];






// 客服发消息接口
// http请求方式: POST
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_token;

// 有 data
// openid 是 微信唯一标识
// 不是微信号!!!!!!!
// 如果使用微信号  做公众号运行.
// 客服 私仇,加微信私聊对骂
// 这是为了保护隐私

// openid 从哪里看
// 公众号自己的用户 可以获取openid
// 测试页面  用户管理处  有openid


$data = '{
    "touser":"ojAtEs_andEuTqcnmh1d48NHKWPw",
    "msgtype":"text",
    "text":
    {
         "content":"Hello 今晚肛不"
    }
}';


$res = $this-> https_request($url,$data);

var_dump($res);



  }


     public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    public function menu(){
        $turl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxdccdfb1691df1134&secret=acb6b131bfeb632677343251b8f484f2';

        $tres =$this-> https_request($turl);

        $data = json_decode($tres,true);  // 数组

        $access_token = $data['access_token'];


        $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token;
        $data = ' {
     "button":[
     {    
          "type":"view",
          "name":"登入",
          
          "url":"http://likaiguo1997.top/login"
      },
      {    
          "type":"click",
          "name":"今日帅哥",
          "key":"shuaige"
      },
      {
           "name":"更多",
           "sub_button":[
           {    
               "type":"view",
               "name":"鸭子",
               "url":"http://www.soso.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }';




        $res =$this-> https_request($url,$data);

        var_dump($res);

    }
    public function addUser(){
        $name=input();


        $code=Session::get('code','code');

        if ($code['code']!==(int)$name['yzm']){

            return $this->error('验证码有误');
        }
      $list=$this->validate($name,'index/index');
      if ($list!==true){
          return $this->error($list);
      }

      $list=Db::table('user')
            ->field('*')
            ->where('email',$name['tel_email'])
            ->whereOr('tel',$name['tel_email'])
          ->find();
        if (!$list){
            return $this->error('暂无此用户');
        }

        if ($list['pwd']!==$name['pwd']){
            return $this->error('密码有误');
        }



      return '登入成功';


    }


    public function sendSMS()
    {
        $data=input();
       if (empty($data['tel_email'])){
           $data['tel_email']=$data['tel'];
       }

        $code =rand(100000,999999);

        if (!Session::has('code','code')){
            Session::set('code',['code'=>$code,'sum'=>1
            ],'code');
        }else{
            $sum=Session::get('code','code');
            if ($sum['sum']>2){
                echo json_encode('短信发送每天不可超过三次');return;
            }
            $sum['sum']=$sum['sum']+1;
            Session::set('code',['code'=>$code,'sum'=>$sum['sum']
            ],'code');
        }



        $datas=[$code,20];

        // 初始化REST SDK
        $rest = new REST('app.cloopen.com','8883','2013-12-26');


        $rest->setAccount('8aaf07086a58b9ec016a8feaf2951ac3', '2db81954414642c7bd2f19bfd3c0e2e4');
        $rest->setAppId('8aaf07086a58b9ec016a8feaf2e51ac9');
        // 发送模板短信
        $result = $rest->sendTemplateSMS($data['tel_email'],$datas,1);
        if($result == NULL ) {
            echo json_encode('发送失败');
        }
        if($result->statusCode!=0) {
            echo json_encode('发送失败');
        }else{


            echo json_encode('发送成功');
        }
    }
    public function email()
    {
        $email=input('tel_email');
        $mail = new PHPMailer(true);


        // Passing `true` enables exceptions
        try {
            //服务器配置
            $mail->CharSet ="UTF-8";                     //设定邮件编码
            $mail->SMTPDebug = 0;                        // 调试模式输出
            $mail->isSMTP();                             // 使用SMTP
            $mail->Host = 'smtp.qq.com';                // SMTP服务器
            $mail->SMTPAuth = true;                      // 允许 SMTP 认证
            $mail->Username = '1648024440@qq.com';                // SMTP 用户名  即邮箱的用户名
            $mail->Password = 'zmyuozdyuawpfaig';             // SMTP 密码  部分邮箱是授权码(例如163邮箱)
            $mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议
            $mail->Port = 465;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持

            $mail->setFrom('1648024440@qq.com' );  //发件人
            $mail->addAddress($email);  // 收件人

            $mail->addReplyTo('1648024440@qq.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致

            //Content
            $mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容
            $mail->Subject = '杜蕾斯官方网站' . date('Y年m月d日 h:i:s',time());
            $mail->Body    = '<h1>验证码:414214</h1>'. date('Y年m月d日 h:i:s',time());
            $mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';


            if ($mail->Send())
            {
                echo json_encode('发送成功');
            }else{
                echo json_encode('发送失败');
            }

        } catch (Exception $e) {


            echo json_encode( '发送失败');


        }
    }
    public function getRegister(){
        $token = $this->request->token('__token__', 'sha1');
        $this->assign('token', $token);
        return $this->fetch('login/register');
    }
    public function setRegister(){
        $name=input();


        $code=Session::get('code','code');

        if ($code['code']!==(int)$name['yzm']){

            return $this->error('验证码有误');
        }

        $list=$this->validate($name,'index/index');
        if ($list!==true){
            return $this->error($list);
        }

        unset($name['yzm'],$name['repwd']);
        unset($name['__token__']);
        $list=Db::table('user')
            ->insert($name);

        if ($list){
            return $this->success('添加成功','index/index/login');
        }else{
            return $this->error('添加失败');

        }





    }
    public function checkSignature()
    {
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }

        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;

        // 加密/校验流程如下：

// 1）将token、timestamp、nonce三个参数进行字典序排序
// 2）将三个参数字符串拼接成一个字符串进行sha1加密
// 3）开发者获得加密后的字符串可与signature对比，标识该请求来源于微信








        $tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
    public function  getIp(){
        global $ip;
        if(getenv("HTTP_CLIENT_IP")){
            $ip = getenv("HTTP_CLIENT_IP");
        }else if(getenv("HTTP_X_FORWARDED_FOR")){
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        }else if(getenv("REMOTE_ADDR")){
            $ip = getenv("REMOTE_ADDR");
        }else{
            $ip = "NULL";
        }
        return $ip;

    }

}
